package com.yk.rabbitmq.topic;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.yk.rabbitmq.util.ConnectionUtil;

/**
 * @author xiaokai
 * @create 2021-01-29 14:31:15
 * @desc...通配符模式发送消息
 */
public class Producer {
    //交换机名称
    static final String TOPIC_EXCHAGE = "topic_exchage";
    //队列名称
    static final String TOPIC_QUEUE_1 = "topic_queue_1";
    //队列名称
    static final String TOPIC_QUEUE_2 = "topic_queue_2";


    public static void main(String[] args) throws Exception {

        //2 创建连接
        Connection connection = ConnectionUtil.getConnection();
        //3 创建频道
        Channel channel = connection.createChannel();
        //. 声明交换机；参数1：交换机名称，参数2：交换机类型（fanout(广播类型),direct(定向类型),topic(通配符类型)）
        channel.exchangeDeclare(TOPIC_EXCHAGE, BuiltinExchangeType.TOPIC);
//        //4. 声明队列；
//        /**
//         * 参数1：队列名称
//         * 参数2：是否定义持久化队列（消息会持久化保存在服务器上）
//         * 参数3：是否独占本连接
//         * 参数4：是否在不使用的时候队列自动删除
//         * 参数5：其它参数
//         */
//        channel.queueDeclare(DIRECT_QUEUE_INSERT, true, false, false, null);
//        channel.queueDeclare(DIRECT_QUEUE_UPDATE, true, false, false, null);
//
//        //绑定交换机
//        //5. 队列绑定到交换机；参数1：队列名称，参数2：交换机名称，参数3：路由key
//        channel.queueBind(DIRECT_QUEUE_INSERT, DIRECT_EXCHANGE, "insert");
//        channel.queueBind(DIRECT_QUEUE_UPDATE, DIRECT_EXCHANGE, "update");

        //6. 发送消息；

        String message = "你好！小兔纸--item.insert。路由模式 ---Key: insert ";

        /**
         * 参数1：交换机名称；如果没有则指定空字符串（表示使用默认的交换机）
         * 参数2：路由key，简单模式中可以使用队列名称
         * 参数3：消息其它属性
         * 参数4：消息内容
         */
        channel.basicPublish(TOPIC_EXCHAGE, "item.insert", null, message.getBytes());
        System.out.println("已发送消息：" + message);

        message = "你好！小兔纸--item.update。路由模式 ---Key: update ";

        /**
         * 参数1：交换机名称；如果没有则指定空字符串（表示使用默认的交换机）
         * 参数2：路由key，简单模式中可以使用队列名称
         * 参数3：消息其它属性
         * 参数4：消息内容
         */
        channel.basicPublish(TOPIC_EXCHAGE, "item.update", null, message.getBytes());
        System.out.println("已发送消息：" + message);

        message = "你好！小兔纸--item.delete。路由模式 ---Key: delete ";

        /**
         * 参数1：交换机名称；如果没有则指定空字符串（表示使用默认的交换机）
         * 参数2：路由key，简单模式中可以使用队列名称
         * 参数3：消息其它属性
         * 参数4：消息内容
         */
        channel.basicPublish(TOPIC_EXCHAGE, "item.delete", null, message.getBytes());
        System.out.println("已发送消息：" + message);


        System.out.println("生产者消息已经发送");
        //6 关闭资源
        channel.close();
        connection.close();

    }

}
